// every() 方法测试一个数组内的所有元素是否都能通过指定函数的测试。它返回一个布尔值。

//判断数组中的数是否都大于十
function isBigTen(element,index,array){
  // 默认会为传入的回调函数传入三个参数: 元素、索引、原数组
    return element > 10;
}
[1,2,3].every(isBigTen); // false
[11,12,13].every(isBigTen); // true

// 检查一个数组是否为另一个数组的子集
const isSubset = (arr1,arr2) => arr2.every(element => arr1.includes(element))
console.log(isSubset([1,2,3,4,5],[1,2,3])); //true
console.log(isSubset([1,2,3,4,5],[1,2,6])); // false

// -------------------- 修改原数组 -------------------- 
// --------------
//   修 改 元 素
// --------------
let arr = [1, 2, 3, 4];
arr.every((elem, index, arr) => {
  arr[index + 1]--;
  console.log(`[${arr}][${index}] -> ${elem}`);
  return elem < 2;
});

// 循环会迭代 3 次
// 没有修改的情况下只会迭代 2 次
//
// 第 1 次迭代：[1,1,3,4][0] -> 1
// 第 2 次迭代：[1,1,2,4][1] -> 1
// 第 3 次迭代：[1,1,2,3][2] -> 2

// --------------
//   添 加 元 素
// --------------
arr = [1, 2, 3];
arr.every((elem, index, arr) => {
  arr.push("new");
  console.log(`[${arr}][${index}] -> ${elem}`);
  return elem < 4;
});

// 循环迭代 3 次，即使在添加新元素之后
//
// 第 1 次迭代：[1, 2, 3, new][0] -> 1
// 第 2 次迭代：[1, 2, 3, new, new][1] -> 2
// 第 3 次迭代：[1, 2, 3, new, new, new][2] -> 3

// --------------
//   删 除 元 素
// --------------
arr = [1, 2, 3, 4];
arr.every((elem, index, arr) => {
  arr.pop();
  console.log(`[${arr}][${index}] -> ${elem}`);
  return elem < 4;
});

// 循环仅迭代 2 次
// 因为剩余的元素被 `pop()` 删除
//
// 第 1 次迭代：[1,2,3][0] -> 1
// 第 2 次迭代：[1,2][1] -> 2
